AGB FAQ, Communication

FAQ MENU

## Communication

[Q001] Is there a way through the hardware for the transmitting side to determine that the receiving side has actually received the data?
[Q002] Is it necessary to use the timer during communications?
[Q003] I have trouble getting communication using timer interrupt and m4aSoundMain() function synchronized with v-blank interrupt to coexist.
[Q004] What is the best way to determine the status of the cable connection?
[Q005] Can noise cause the communications error flag to rise during communication?
[Q006] Regarding the communications data block size in the multi-play communications library, when I change the MULTI_SIO_BLOCK_SIZE from 16 to 14 or 18, the communications become unstable in MultiSio.h and MultiSioDefine.s,. Can you explain why?
[Q007] Is the precision of communications affected when the battery voltage drops?

### [Q001]

Is there a way through the hardware for the transmitting side to determine that the receiving side has actually received the data?

### [A001]

In multi-player communications, there is no way when using hardware to determine that the other party has actually received the data. For this reason, you should implement some convention such as having the receiving side send back a signal once the data has been received, or freeing enough of a time interval for transmission to ensure that the data is received.

[TOP]

### [Q002]

Is it necessary to use the timer during communications?

### [A002]

Simultaneous communication interrupts to the master and slave cannot be staged due to errors in the timing of waveform edge detection, as per the hardware specifications. (There are individual variations.)
For this reason, the master device could conceivably start transmissions before the slave device has finished receiving data, leading to a failure in communications.
You could ensure communications during an SIO interrupt by inserting a sufficient wait before the master begins transmitting, but to do so would require a wait equal to the guaranteed period for successful communications plus at least 600 clock cycles (an adequate value for errors in the generation of SIO interrupts). This long wait alone would be a heavy burden.
Moreover, other interrupt processes (m4aSoundVSync(), etc.) would be delayed by that much, and there is a high probability this would have bad effects.
For these reasons, please be sure to use the timer for data transmissions, and free up a transfer interval that is 600 clock cycles longer than the time actually used for transmission operations.
Consider this as an adequate value to ensure proper operation of multi-player communications with all production AGBs.

[TOP]

### [Q003]

I have trouble getting communication using timer interrupt and m4aSoundMain() function synchronized with v-blank interrupt to coexist.

### [A003]

All devices must enable multiple interrupts by SIO interrupts to the slave device and timer interrupts to the master device.
Note that when you use multiple interrupts in combination with m4aSoundMain(), during an interrupt, the size of the stack area for interrupts increases by that amount. So you need to make it avoid stack overflow.

[TOP]

### [Q004]

What is the best way to determine the status of the cable connection?

### [A004]

The status of the terminal can be checked with the general-purpose input/output register (REG_RCNT:0x04000134). But because various devices can connect to the SIO connector, there is a chance of making an incorrect characterization by just checking the terminal status. Please be sure to check whether communications are actually taking place and whether or not there is a response from the slave device.

[TOP]

### [Q005]

Can noise cause the communications error flag to be set during communications?

### [A005]

Yes. An error can also occur if the connector is not attached properly. Please keep these in mind when you create your program. Since the communications error flag is not dependable during communications, verify the flag when a communication exchange has stopped, such as, during the SI0 interrupt processing.

[TOP]

### [Q006]

Regarding the communications data block size in the multi-play communications library, when I change the MULTI_SIO_BLOCK_SIZE from 16 to 14 or 18 in MultiSio.h and MultiSioDefine.s, the communication becomes unstable. Can you explain why?

### [A006]

When the value of MULTI_SIO_BLOCK_SIZE is not a multiple of 4 bytes, the C language structure padding in MultiSio.h and MultiSioDefine.s will distort the packet alignment.

[TOP]

### [Q007]

Is the precision of communications affected when the battery voltage drops?

### [A007]

No. The device generates a stable voltage internally that is unrelated to the amount of charge left in the battery.

[TOP]

D.C.N. AGB-06-0027-001A1 (2/21/01)
© 2001 Nintendo of America Inc.